package br.com.nds.games.shotnup.engine;

import javax.swing.SwingUtilities;

/**
 * Classe com a Thread que avalia a situação das teclas e atualiza o "renderer" conforme informações
 * @author Leonardo
 */
public class ThreadFrameMovimento01 extends Thread {
    
    private final int VELOCIDADE_JOGADOR1 = 5;
    private final int DELAY = 10;
    
    private int xJogador1 = 300;
    private int yJogador1 = 300;
    
    private int xInimigo = 300;
    private int yIninigo = 10;
    private int direcaoInimigo = 5;
    
    private boolean up = false;
    private boolean down = false;
    private boolean left = false;
    private boolean right = false;

    private JFrameMovimento01 frameMovimento;

    public ThreadFrameMovimento01(JFrameMovimento01 frameMovimento) {
        this.frameMovimento = frameMovimento;
    }
    
    @Override
    public void run() {
        while (true) {
            this.modificaEstadoTemporal();
            this.modificaEstadoEntrada();
            this.renderiza();
            
            try {
                ThreadFrameMovimento01.sleep(DELAY);
            } catch (Exception e) {}
        }
    }

    private void modificaEstadoTemporal() {
        // Faz o inimigo se mover na direção.  Se ele passar pela esquerda ou direita da tela
        // Faz mudar a direção.
        this.xInimigo += this.direcaoInimigo;
        if ((this.xInimigo > 600) || (this.xInimigo < 0))
            this.direcaoInimigo *= -1;
    }
    
    private void modificaEstadoEntrada() {
        if (this.isUp())
            this.yJogador1 -= VELOCIDADE_JOGADOR1;
        if (this.isDown())
            this.yJogador1 += VELOCIDADE_JOGADOR1;
        if (this.isLeft())
            this.xJogador1 -= VELOCIDADE_JOGADOR1;
        if (this.isRight())
            this.xJogador1 += VELOCIDADE_JOGADOR1;
    }


    private void renderiza() {
        this.frameMovimento.setJPanel1Position(xJogador1, yJogador1);
        this.frameMovimento.setJPanel2Position(xInimigo, yIninigo);
        this.frameMovimento.repaint();
    }
    
    /**
     * @return the up
     */
    public boolean isUp() {
        return up;
    }

    /**
     * @param up the up to set
     */
    public void setUp(boolean up) {
        this.up = up;
    }

    /**
     * @return the down
     */
    public boolean isDown() {
        return down;
    }

    /**
     * @param down the down to set
     */
    public void setDown(boolean down) {
        this.down = down;
    }

    /**
     * @return the left
     */
    public boolean isLeft() {
        return left;
    }

    /**
     * @param left the left to set
     */
    public void setLeft(boolean left) {
        this.left = left;
    }

    /**
     * @return the right
     */
    public boolean isRight() {
        return right;
    }

    /**
     * @param right the right to set
     */
    public void setRight(boolean right) {
        this.right = right;
    }
  
}
